/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pro.dao;

import pro.bean.usuario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
//import javax.mail.Message;
//import javax.mail.Session;
//import javax.mail.Transport;
//import javax.mail.internet.InternetAddress;
//import javax.mail.internet.MimeMessage;
import pro.bean.*;
import pro.dao.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class UsuarioDAO extends Dbase {

    public usuario Data(String user) {

        usuario us = new usuario();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {
            pstmt = conn.prepareStatement("Select idusuario, nombre, apellido, DATE_FORMAT(fecha_reg, '%d-%m-%Y')fecha_reg, DATE_FORMAT(fecha_ins, '%d-%m-%Y')fecha_ins, estado, username, password,telefono, mail   From usuario Where username ='" + user + "';");
            res = pstmt.executeQuery();
            while (res.next()) {
                us = new usuario();
                us.setIdusuario(res.getInt("idusuario"));
                us.setNombre(res.getString("nombre"));
                us.setApellido(res.getString("apellido"));
                us.setFecha_reg(res.getString("fecha_reg"));
                us.setFecha_ins(res.getString("fecha_ins"));
                us.setEstado(res.getByte("estado"));
                us.setUsername(res.getString("username"));
                us.setPassword(res.getString("password"));
                us.setTelefono(res.getString("telefono"));
                us.setMail(res.getString("mail"));

            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException ex) {
            Logger.getLogger(usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException ex) {
                }
                res = null;
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException ex) {
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }

        }

        return us;
    }

    public void actualizaPass(String user, String password) {

        this.init_mysql();
        PreparedStatement pstmt = null;

        try {
            pstmt = conn.prepareStatement("Update usuario Set password=?"
                    + "  Where username = ?;");
            pstmt.setString(1, user);
            pstmt.setString(2, password);

            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException ex) {
            Logger.getLogger(usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException ex) {
                    ;
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }

        }

    }

    public usuario DataMail(String user) {

        usuario us = new usuario();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {
            pstmt = conn.prepareStatement("Select idusuario, nombre, apellido, DATE_FORMAT(fecha_reg, '%d-%m-%Y')fecha_reg, DATE_FORMAT(fecha_ins, '%d-%m-%Y')fecha_ins, estado, username, password,telefono, mail   From usuario Where mail='" + user + "';");
            res = pstmt.executeQuery();
            while (res.next()) {
                us = new usuario();
                us.setIdusuario(res.getInt("idusuario"));
                us.setNombre(res.getString("nombre"));
                us.setApellido(res.getString("apellido"));
                us.setFecha_reg(res.getString("fecha_reg"));
                us.setFecha_ins(res.getString("fecha_ins"));
                us.setEstado(res.getByte("estado"));
                us.setUsername(res.getString("username"));
                us.setPassword(res.getString("password"));
                us.setTelefono(res.getString("telefono"));
                us.setMail(res.getString("mail"));

            }

        } catch (SQLException ex) {
            Logger.getLogger(usuario.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (res != null) {
                try {
                    res.close();
                } catch (SQLException ex) {
                    ;
                }
                res = null;
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException ex) {
                    ;
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
                conn = null;
            }

        }

        return us;
    }

    public void enviaMail(String destino, String texto) {

        try {
            // Propiedades de la conexión
            Properties props = new Properties();
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.user", "angello.rodriguez@pucp.pe");
            props.setProperty("mail.smtp.auth", "true");

//            // Preparamos la sesion
//            Session session = Session.getDefaultInstance(props);
//
//            // Construimos el mensaje
//            MimeMessage message = new MimeMessage(session);
//            message.setFrom(new InternetAddress("yo@yo.com"));
//            message.addRecipient(
//                    Message.RecipientType.TO,
//                    new InternetAddress(destino));
//            message.setSubject("Recuperacion de contraseña");
//            message.setText(
//                    texto);
//
//            // Lo enviamos.
//            Transport t = session.getTransport("smtp");
//            t.connect("angello.rodriguez@pucp.pe", "sevilla12");
//            t.sendMessage(message, message.getAllRecipients());

            // Cierre.
//            t.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public ArrayList<usuario> listarUsuarios(String nombreUsuario, Integer idProyecto) throws SQLException {


        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        ArrayList<usuario> listaUsuarios = new ArrayList<usuario>(0);
        try {
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb",
                    "root", "root");
            stmt = conn.createStatement();
            String sql = "SELECT idusuario, Nombre,Apellido,estado,username,password,telefono,mail"
                    + " FROM usuario u"
                    + " where upper(Nombre) like upper('" + nombreUsuario + "%')";
            sql += " and idusuario not in (select usuario_idusuario from proyectos_x_usuario where proyectos_idproyectos=" + idProyecto;
            sql += ") ORDER BY 2,3";
            rs = stmt.executeQuery(sql);
            usuario nuevoUsuario = null;
            int contador = 0;
            while (rs.next()) {
                nuevoUsuario = new usuario();
                nuevoUsuario.setNro(++contador);
                nuevoUsuario.setIdusuario(rs.getInt(1));
                nuevoUsuario.setNombre(rs.getString(2));
                nuevoUsuario.setApellido(rs.getString(3));
                nuevoUsuario.setEstado(rs.getInt(4));
                nuevoUsuario.setUsername(rs.getString(5));
                nuevoUsuario.setPassword(rs.getString(6));
                nuevoUsuario.setTelefono(rs.getString(7));
                nuevoUsuario.setMail(rs.getString(8));
                listaUsuarios.add(nuevoUsuario);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaUsuarios;
    }

    public usuario buscarUsuario(String idUsuario) throws SQLException {

        if (idUsuario.compareTo("") == 0) {
            return new usuario();
        }

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        usuario user = new usuario();
        try {
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb",
                    "root", "root");
            stmt = conn.createStatement();
            String sql = "SELECT idusuario,nombre,apellido,estado,username,password,telefono,mail";
            sql += " FROM usuario u";
            sql += " WHERE u.idusuario = " + idUsuario;
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                user.setIdusuario(rs.getInt(1));
                user.setNombre(rs.getString(2));
                user.setApellido(rs.getString(3));
                user.setEstado(rs.getInt(4));
                user.setUsername(rs.getString(5));
                user.setPassword(rs.getString(6));
                user.setTelefono(rs.getString(7));
                user.setMail(rs.getString(8));
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return user;
    }

    public ArrayList<usuario> usuariosXProyecto(Integer idProyecto) throws SQLException {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        ArrayList<usuario> listaUsuarios = new ArrayList<usuario>(0);
        try {
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb",
                    "root", "root");
            stmt = conn.createStatement();
            String sql = "SELECT idusuario, Nombre,Apellido,estado,username,password,telefono,mail"
                    + " FROM usuario u";
            sql += " where idusuario in (select usuario_idusuario from proyectos_x_usuario where proyectos_idproyectos=" + idProyecto;
            sql += ") ORDER BY 2,3";
            rs = stmt.executeQuery(sql);
            usuario nuevoUsuario = null;
            int contador = 0;
            while (rs.next()) {
                nuevoUsuario = new usuario();
                nuevoUsuario.setNro(++contador);
                nuevoUsuario.setIdusuario(rs.getInt(1));
                nuevoUsuario.setNombre(rs.getString(2));
                nuevoUsuario.setApellido(rs.getString(3));
                nuevoUsuario.setEstado(rs.getByte(4));
                nuevoUsuario.setUsername(rs.getString(5));
                nuevoUsuario.setPassword(rs.getString(6));
                nuevoUsuario.setTelefono(rs.getString(7));
                nuevoUsuario.setMail(rs.getString(8));
                listaUsuarios.add(nuevoUsuario);
            }
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
        return listaUsuarios;
    }
}
